package cn.life.business.user.dao;

import cn.life.business.notice.entity.po.NoticeUserPo;
import cn.life.business.user.entity.po.LoginUser;
import cn.life.business.user.entity.po.UserInfo;
import cn.life.business.user.entity.vo.LoginUserVo;
import cn.life.business.user.entity.vo.RegisterUserVo;
import cn.life.business.user.entity.vo.UserInfoVo;
import cn.life.common.entity.model.CMessage;
import cn.life.common.entity.po.ProjectPo;
import cn.life.common.entity.vo.Pagination;

import java.util.List;
import java.util.Map;

/**
 * @Description:
 * @Author 李佳明
 * @Date 2018/7/5 0005.6:59.
 */
public interface UserDao {
    /**
     * @Description:    增加用户登录信息
     *
     * @param user
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/7/5 0005 7:01
     */
    Long addLoginUser(RegisterUserVo user);
    /**
     * @Description:    用户登陆
     *
     * @param loginUser
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/7/16 0016 上午 9:47
     */
    UserInfo login(LoginUser loginUser);
    /**
     * @Description:    增加用户基础信息
     *
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/7/16 0016 上午 9:34
     */
    int addUserInfo(UserInfo user);
    /**
     * @Description:    更新用户信息
     *
     * @param userInfo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/7/17 0017 上午 9:50
     */
    int updateUserInfo(UserInfo userInfo);
    /**
     * @Description:    获取用户信息
     *
     * @param userInfo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/7/10 0005 00:33
     */
    UserInfo getUserInfo(UserInfo userInfo);
    /**
     * @Description:    查询用户登陆信息
     *
     * @param id
     * @return:
     *
     * @Author 李佳明
     * @Date 2018-09-03 下午 1:59
     */
    LoginUser getLoginUserInfo(Long id);
    /**
     * @Description:    查询用户登陆信息
     *
     * @param loginName
     * @return:
     *
     * @Author 李佳明
     * @Date 2018-09-03 下午 1:59
     */
    LoginUser getLoginUserInfo(String loginName);
    /**
     * @Description:    获取用户信息集合
     *
     * @param userInfo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/13 0013 下午 1:34
     */
    Pagination<UserInfo> getUserList(UserInfo userInfo);
    /**
     * @Description:    获取用户全部信息
     *
     * @param userInfo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/13 0013 下午 5:17
     */
    UserInfoVo queryDetail(UserInfo userInfo);
    /**
     * @Description:    修改用户权限
     *
     * @param userInfo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/14 0014 下午 1:32
     */
    int updateUserRole(UserInfoVo userInfo);
    /**
     * @Description:    修改用户账号密码
     *
     * @param userInfo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/14 0014 下午 1:32
     */
    int updateLoginData(UserInfoVo userInfo);
    /**
     * @Description:    验证账号
     *
     * @param user
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/14 0014 下午 3:26
     */
    boolean verification(RegisterUserVo user);
    /**
     * @Description:    查询该用户在该项目中是否存在角色
     *
     * @param userInfoVo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/14 0014 下午 3:56
     */
    int queryProjectRole(UserInfoVo userInfoVo);
    /**
     * @Description:    增加角色
     *
     * @param userInfoVo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/14 0014 下午 3:58
     */
    int addUserRole(UserInfoVo userInfoVo);
    /**
     * @Description:    删除用户信息
     *
     * @param userInfo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/15 0015 下午 1:48
     */
    int deleteUser(UserInfo userInfo);
    /**
     * @Description:    获取项目下的用户列表
     *
     * @param userInfo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/8/21 0021 上午 9:52
     */
    List<UserInfo> getProUserList(UserInfo userInfo);
    /**
     * @Description:    修改用户密码
     *
     * @param loginUserVo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018-09-03 上午 10:41
     */
    int updatePassword(LoginUserVo loginUserVo);
    /**
     * @Description:    查询项目该角色下的用户Id集合
     *
     * @param projectId,userRole
     * @return:
     *
     * @Author 李佳明
     * @Date 2018-09-10 下午 4:42
     */
    List<Map<String,Object>> queryProRoleUserId(Long projectId, int userRole);
    /**
     * @Description:    查询公告中查收人员集合信息
     *
     * @param userIds
     * @return:
     *
     * @Author 李佳明
     * @Date 2018-09-18 上午 10:01
     */
    List<Map<String,Object>> queryUserList(String userIds);
    /**
     * @Description:    获取用户当前项目Id
     *
     * @param userId
     * @return:
     *
     * @Author 李佳明
     * @Date 2018-09-20 上午 10:24
     */
    public Long queryUserProjectId(Long userId);
    /**
     * @Description:    查询当前项目下的技术监管，总经理，还有董事长
     *
     * @param projectPo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/11/29 0029 23:11
     */
    List<UserInfo> queryMaterialAuditUserList(ProjectPo projectPo);
    /**
     * @Description:    查询当前项目下的总经理，还有董事长
     *
     * @param projectPo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/11/29 0029 23:11
     */
    List<UserInfo> queryScheduleAuditUserList(ProjectPo projectPo);
    /**
     * @Description:    查询项目下技术监管人员列表
     *
     * @param projectPo
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/12/1 0001 23:40
     */
    List<UserInfo> queryTechnologyManagerList(ProjectPo projectPo);
    /**
     * @Description:    统计用户合格率
     *u
     * @param
     * @return:
     *
     * @Author 李佳明
     * @Date 2018/12/9 0009 21:50
     */
    List<Map<String, Object>> queryUserStatistics(ProjectPo projectPo);
}
